import axios from 'axios';
import qs from 'qs'
import {
	Loading
} from 'element-ui';
let loadingInstance = null;
// 创建一个axios的实例,设置了默认配置
var request = axios.create({
	"baseURL": "/",
	timeout: 5000,
	headers: {
		"post": {
			"Content-Type": "application/x-www-form-urlencoded"
		}
	}
})

// 在vue的原型上面添加一个$http的方法
// vue的所有实例（包含各组件各页面）都将会拥有一个this.$http方法

// axios的拦截器的作业(请求拦截)
request.interceptors.request.use(function(config) {
	// 如果配置文件中有loading则显示加载提示
	if (config.loading) {
		// 默认加载提示
		var loading = {
			lock: true,
			text: '登录中...',
			spinner: 'el-icon-loading',
			background: 'rgba(0, 0, 0, 0.7)'
		}
		// 如果已经配置了loading

		// 设置loading的值为 用户传入的与默认loading值合并
		config.loading = Object.assign(loading, config.loading)
		// 弹出loading框时候用的 用户传入和默认传入的参数实现加载
		loadingInstance = Loading.service(config.loading);
	}

	// 如果是post请求，那么我们可以把data序列化,并且传入的数据类型为对象
	if (config.method == "post" && typeof config.data == "object") {
		config.data = qs.stringify(config.data)
	}
	// 请求拦截，最终要把配置内容返回
	return config;
})

// axios的响应拦截
request.interceptors.response.use(function(req) {
	// console.log("加载完毕")
	// 响应拦截最终要不啊响应的结果返回

	if (loadingInstance) {
		loadingInstance.close();
	}
	return req;
}, function(err) {
	// 响应失败，把失败的结果返回
	if (loadingInstance) {
		loadingInstance.close();
	}
	return Promise.reject(err);
})
export default request;
